/**
 * 通过位移方式转数字
 * >> 表示有符号位移
 * >>> 表示无符号位移
 * 这种操作是先把值转为2进制，然后截取保留32位长度，最后再通过parseInt(val, 2)转为十进制
 * 对于有符号的操作，最高位为符号位，1表示负数，0表示正数；十进制转二进制：原码 -> 反码 -> 加一；二进制转十进制：减一 -> 反码 ->得到原码，
 */

function toNumber(val) {
  console.log(val >> 0);
}

function toNumber2(val) {
  console.log(val >>> 0);
}

// toNumber(null); // 0
// toNumber(undefined); // 0
// toNumber({}); // 0
// toNumber([56, 56]); // 空数组或者数组长度大于1时返回0，一个数字的数组返回该数字
// toNumber(true); // 1
// toNumber(10); // 10

// toNumber2(null); // 0
// toNumber2(undefined); // 0
// toNumber2({}); // 0
// toNumber2([56, 56]); // 空数组或者数组长度大于1时返回0，一个数字的数组返回该数字
// toNumber2(true); // 1
// toNumber2(10); // 10

console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(
  `Number.MAX_SAFE_INTEGER 的二进制`,
  Number.MAX_SAFE_INTEGER.toString(2)
); // 11111111111111111111111111111111111111111111111111111
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
toNumber(Number.MAX_SAFE_INTEGER); // -1
toNumber2(Number.MAX_SAFE_INTEGER); // 4294967295
